package com.haiyou.dc.guava.joiner;

import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * https://blog.51cto.com/hanchaohan/1931272?source=drt
 */
public class TestJoiner {

    public static void main(String[] args) {
        System.out.println("---------------- ");
        /**
         * Google Guava提供了Joiner类专门用来连接String。
         * 譬如说有个String数组，里面有"a","b","c"，
         * 我们可以通过使用StringBuilder来创建String "a,b,c"。
         */
        Joiner joiner = Joiner.on(";");
        String str1 = joiner.join(new String[]{"a","b","c"});
        System.out.println(" str1 : " + str1);


        /**
         * 当然Joiner.join还提供了参数为Iterable的overload形式。也就是说你可以传各种List和Set。
         * 如果被连接String里面要过滤null，可以这样
         */
        Joiner joiner2 = Joiner.on(";").skipNulls(); //过滤null
        String str2 = joiner2.join(new String[]{"a","b",null,"c"});

        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add(null);
        list.add("3");

        String str21 = joiner2.join(list);
        System.out.println(" str2 : " + str2);
        System.out.println(" str21 : " + str21);

        /**
         * 如果对null进行替换操作
         */
        Joiner joiner3 = Joiner.on(";").useForNull("!");
        String str3 = joiner3.join(new String[]{"a","b",null,"c"});
        System.out.println(" str3 : " + str3);

        /**
         * Joiner还提供了appendTo函数,对传入的StringBuider作处理
         */
        Joiner joiner4 = Joiner.on(";");
        StringBuilder ab = new StringBuilder("start : ");
        StringBuilder str4 = joiner4.appendTo(ab, new String[]{"a","b","c"});
        System.out.println(" str4 : " + str4.toString());

        /**
         * MapJoiner类也利用了Joiner提供的Map的join功能
         */
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "a");
        map.put(2, "b");
        Joiner.MapJoiner joiner5 = Joiner.on(";").withKeyValueSeparator("→");
        String str5 = joiner5.join(map);
        System.out.println(" str5 : " + str5);

        //url拼接
        Map<String, Object> map2 = new HashMap<>();
        map2.put("param1", "HAN");
        map2.put("param2", 2);
        Joiner.MapJoiner joiner6 = Joiner.on("&").withKeyValueSeparator("=");
        String str6 = joiner6.join(map2);
        System.out.println(" str6 : " + str6);

        String str7 = joiner6.join(ImmutableMap.of("id","123","name","green"));
        System.out.println(" str7 : " + str7);

        //分割
        Map<String, String> join = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green&param1=HAN&param2=2");
        System.out.println(" map :" + join.toString());
    }
}
